package com.hns.tool.pub;

import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.TimeZone;

import org.apache.commons.lang.time.DateUtils;

/**
 * 日期工具类
 * @author:Fisher
 * @email:zhuangcaijin@126.com
 * @version Revision 2.0.0
 */
public class DateTool {

    /**
     * 日期带时分秒默认格式
     */
    private static final String TIMEZONE_FORMAT_DEFAULT = "yyyy-MM-dd HH:mm:ss";

    /**
     * 带有时分秒格式对象
     */
    public static final SimpleDateFormat formatDate = new SimpleDateFormat(TIMEZONE_FORMAT_DEFAULT);

    public static final int TIME_UNIT_DAY = 0;

    public static final int TIME_UNIT_HOUR = 1;

    public static final int TIME_UNIT_MINS = 2;

    public static final int TIME_UNIT_SECONDS = 3;

    /**
     * 日期不带时分秒默认标准格式
     */
    private static final String STANDARD_DATE_FORMAT_DEFAULT = "yyyy-MM-dd";

    /**
     * 不带有时分秒格式对象
     */
    public static final SimpleDateFormat SHORT_DATE_FORMAT = new SimpleDateFormat(STANDARD_DATE_FORMAT_DEFAULT);

    /**
     * 日期年运算
     * @param d Date对象
     * @param amount 年跨度
     * @return 加减计算的幅度
     * @author:Fisher
     * @email:zhuangcaijin@126.com
     */
    public static Date calculateByYear(Date d, int amount) {
        return calculate(d, GregorianCalendar.YEAR, amount);
    }

    /**
     * 日期月运算
     * @param d Date对象
     * @param amount 月跨度
     * @return 加减计算的幅度
     * @author:Fisher
     * @email:zhuangcaijin@126.com
     */
    public static Date calculateByMonth(Date d, int amount) {
        return calculate(d, GregorianCalendar.MONTH, amount);
    }

    /**
     * 对日期(时间)中的日进行加减计算 例子: <br>
     * 如果Date类型的d为 2005年8月20日,那么 <br>
     * calculateByDate(d,-10)的值为2005年8月10日 <br>
     * 而calculateByDate(d,+10)的值为2005年8月30日 <br>
     * @param d 日期(时间)
     * @param amount 加减计算的幅度,+n=加n天;-n=减n天
     * @return 计算后的日期(时间)
     * @author:Fisher
     * @email:zhuangcaijin@126.com
     */
    public static Date calculateByDate(Date d, int amount) {
        return calculate(d, GregorianCalendar.DATE, amount);
    }

    /**
     * 对日期(时间)中的日进行加减计算
     * @param d 日期字符串
     * @param amount 加减计算的幅度
     * @return 计算后的日期(时间)
     * @throws ParseException
     * @author:JeffXu
     * @email:835264047@qq.com
     */
    public static String calculateByDate(String d, int amount) throws ParseException {
        Calendar cd = Calendar.getInstance();
        cd.setTime(SHORT_DATE_FORMAT.parse(d));
        cd.add(Calendar.DATE, amount);// 增加一天
        // cd.add(Calendar.MONTH, n);//增加一个月
        return date2StringDefault(cd.getTime());
    }

    /**
     * 对日期(时间)中的分钟进行加减计算
     * @param d 日期字符串
     * @param amount 加减计算的幅度
     * @return 计算后的日期(时间)
     * @author:Fisher
     * @email:zhuangcaijin@126.com
     */
    public static Date calculateByMinute(Date d, int amount) {
        return calculate(d, GregorianCalendar.MINUTE, amount);
    }

    /**
     * 对日期(时间)中由field参数指定的日期成员进行加减计算. <br>
     * 例子: <br>
     * 如果Date类型的d为 2005年8月20日,那么 <br>
     * calculate(d,GregorianCalendar.YEAR,-10)的值为1995年8月20日 <br>
     * 而calculate(d,GregorianCalendar.YEAR,+10)的值为2015年8月20日 <br>
     * @param d 日期(时间).
     * @param field 日期成员. <br>
     *            日期成员主要有: <br>
     *            年:GregorianCalendar.YEAR <br>
     *            月:GregorianCalendar.MONTH <br>
     *            日:GregorianCalendar.DATE <br>
     *            时:GregorianCalendar.HOUR <br>
     *            分:GregorianCalendar.MINUTE <br>
     *            秒:GregorianCalendar.SECOND <br>
     *            毫秒:GregorianCalendar.MILLISECOND <br>
     * @param amount 加减计算的幅度.+n=加n个由参数field指定的日期成员值;-n=减n个由参数field代表的日期成员值.
     * @return 计算后的日期(时间)
     * @author:Fisher
     * @email:zhuangcaijin@126.com
     */
    private static Date calculate(Date d, int field, int amount) {
        if (d == null)
            return null;
        GregorianCalendar g = new GregorianCalendar();
        g.setTime(d);
        g.add(field, amount);
        return g.getTime();
    }

    /**
     * 转化为标准日期,标准日期格式不带时分秒
     * @param aDate 传入的日期
     * @return 转化后的日期
     * @author:wucx
     * @email:zhuangcaijin@126.com
     */
    public static String date2StringDefault(Date aDate) {
        return date2String(STANDARD_DATE_FORMAT_DEFAULT, aDate);
    }

    /**
     * 将日期转化为指定格式的日期字符串
     * @param formater 日期或时间的格式.
     * @param aDate 传入的日期
     * @return 格式化后的日期字符串
     * @author:Fisher
     * @email:zhuangcaijin@126.com
     */
    public static String date2String(String formater, Date aDate) {
        if (PubUtil.isEmpty(formater))
            return null;
        if (aDate == null)
            return null;
        return (new SimpleDateFormat(formater)).format(aDate);
    }

    /**
     * 当前日期(时间)转化为字符串.
     * @param formater 日期或时间的格式.
     * @return 日期转化后的字符串.
     * @author:Fisher
     * @email:zhuangcaijin@126.com
     */
    public static String date2String(String formater) {
        return date2String(formater, new Date());
    }

    /**
     * 获取当前日期对应的星期数. <br>
     * 1=星期天,2=星期一,3=星期二,4=星期三,5=星期四,6=星期五,7=星期六
     * @return 当前日期对应的星期数
     * @author:Fisher
     * @email:zhuangcaijin@126.com
     */
    public static int dayOfWeek() {
        GregorianCalendar g = new GregorianCalendar();
        int ret = g.get(java.util.Calendar.DAY_OF_WEEK);
        g = null;
        return ret;
    }

    /**
     * 将日期时间字符串根据转换为指定时区的日期时间.
     * @param srcFormater 待转化的日期时间的格式.
     * @param srcDateTime 待转化的日期时间.
     * @param dstFormater 目标的日期时间的格式.
     * @param dstTimeZoneId 目标的时区编号.
     * @return 转化后的日期时间.
     * @author:Fisher
     * @email:zhuangcaijin@126.com
     */
    public static String string2Timezone(String srcFormater, String srcDateTime, String dstFormater, String dstTimeZoneId) {
        if (PubUtil.isEmpty(srcFormater))
            return null;
        if (srcDateTime == null || "".equals(srcDateTime))
            return null;
        if (dstFormater == null || "".equals(dstFormater))
            return null;
        if (dstTimeZoneId == null || "".equals(dstTimeZoneId))
            return null;
        SimpleDateFormat sdf = new SimpleDateFormat(srcFormater);
        try {
            int diffTime = getDiffTimeZoneRawOffset(dstTimeZoneId);
            Date d = sdf.parse(srcDateTime);
            long nowTime = d.getTime();
            long newNowTime = nowTime - diffTime;
            d = new Date(newNowTime);
            return date2String(dstFormater, d);
        } catch (ParseException e) {
            return null;
        } finally {
            sdf = null;
        }
    }

    /**
     * 获取系统当前默认时区与指定时区的时间差.(单位:毫秒)
     * @param timeZoneId 时区Id
     * @return 系统当前默认时区与指定时区的时间差.(单位:毫秒)
     * @author:Fisher
     * @email:zhuangcaijin@126.com
     */
    private static int getDiffTimeZoneRawOffset(String timeZoneId) {
        return TimeZone.getDefault().getRawOffset() - TimeZone.getTimeZone(timeZoneId).getRawOffset();
    }

    /**
     * 将日期时间字符串根据转换为指定时区的日期时间.
     * @param srcDateTime 待转化的日期时间.
     * @param dstTimeZoneId 目标的时区编号.
     * @return 转化后的日期时间.
     * @author:Fisher
     * @email:zhuangcaijin@126.com
     */
    public static String string2TimezoneDefault(String srcDateTime, String dstTimeZoneId) {
        return string2Timezone(TIMEZONE_FORMAT_DEFAULT, srcDateTime, TIMEZONE_FORMAT_DEFAULT, dstTimeZoneId);
    }

    /**
     * 计算两个日期之间差，并转化为指定时间单位格式的数值
     * @param date1 前一个日期
     * @param date2 后一个日期
     * @param timeUnit 时间单位类别 TIME_DAY_UNIT 返回天， TIME_HOUR_UNIT 返回小时 TIME_MINS_UNIT 返回分钟， TIME_SECONDS_UNIT 返回秒
     * @return 转化为指定时间单位的时间差数值
     * @author:wucx
     * @email:zhuangcaijin@126.com
     */
    // TODO
    public static double calculateTimeForTimeUnit(Date date1, Date date2, int timeUnit) {
        BigDecimal dateTime = new BigDecimal(Long.toString(date1.getTime()));
        BigDecimal dateTime2 = new BigDecimal(Long.toString(date2.getTime()));
        dateTime = dateTime2.subtract(dateTime);
        BigDecimal tmpTime = new BigDecimal("1000");
        switch (timeUnit) {
        // 返回单位为天
        case TIME_UNIT_DAY:
            tmpTime = tmpTime.multiply(new BigDecimal("60").multiply(new BigDecimal("60")).multiply(new BigDecimal("24")));
            break;

        // 返回单位为小时
        case TIME_UNIT_HOUR:
            tmpTime = tmpTime.multiply(new BigDecimal("60").multiply(new BigDecimal("60")));
            break;

        // 返回单位为分钟
        case TIME_UNIT_MINS:
            tmpTime = tmpTime.multiply(new BigDecimal("60"));
            break;

        // 返回单位为秒
        case TIME_UNIT_SECONDS:
            break;
        }
        dateTime = dateTime.divide(tmpTime, 2, BigDecimal.ROUND_HALF_UP);
        return dateTime.doubleValue();
    }

    /**
     * 根据输入秒数，输入日期格式换算
     * @param Seconds 秒数
     * @param timeUnit 时间单位
     * @return 时分秒日期格式字符串
     * @author:Fisher
     * @email:zhuangcaijin@126.com
     */
    public static String transformTimeForTimeUnit(BigDecimal Seconds, String timeUnit) {
        if (PubUtil.isEmpty(Seconds))
            return "00'00'00''";

        String formatTime = null;
        BigDecimal hour = Seconds.divide(new BigDecimal("3600"), 0, BigDecimal.ROUND_FLOOR);
        BigDecimal min = Seconds.subtract(new BigDecimal("3600").multiply(hour)).divide(new BigDecimal("60"), 0, BigDecimal.ROUND_FLOOR);
        BigDecimal sec = Seconds.subtract(new BigDecimal("3600").multiply(hour).add(new BigDecimal("60").multiply(min)));
        formatTime = timeUnit.replace("HH", String.format("%02d", hour.longValue()));
        formatTime = formatTime.replace("MI", String.format("%02d", min.longValue()));
        formatTime = formatTime.replace("SS", String.format("%02d", sec.longValue()));
        return formatTime;
    }

    /**
     * 计算两个日期之间差，并转化为指定时间单位格式的数值
     * @param dateStr1 前一个日期
     * @param dateStr2 后一个日期
     * @param timeUnit 时间单位 TIME_DAY_UNIT 返回天， TIME_HOUR_UNIT 返回小时 TIME_MINS_UNIT 返回分钟， TIME_SECONDS_UNIT 返回秒
     * @return 转化为指定时间单位的时间差数值
     * @throws ParseException
     * @author:wucx
     * @email:zhuangcaijin@126.com
     */
    public static double calculateTimeForTimeUnit(String dateStr1, String dateStr2, int timeUnit) throws ParseException {
        Date date1 = formatDate.parse(dateStr1);
        Date date2 = formatDate.parse(dateStr2);
        return calculateTimeForTimeUnit(date1, date2, timeUnit);
    }

    /**
     * 比较两个日期的大小
     * @param date1 开始日期
     * @param date2 结束日期
     * @return 如果date1 大于date2则返回true,反之返回false
     * @author:Fisher
     * @email:zhuangcaijin@126.com
     */
    public static boolean compareDate(Date date1, Date date2) {
        long interval = 0;
        interval = date1.getTime() - date2.getTime();
        if (interval < 0)
            return false;
        return true;
    }

    /**
     * 比较两个日期的大小
     * @param dateStr1 开始日期
     * @param dateStr2 结束日期
     * @return 如果date1 大于date2则返回true,反之返回false
     * @throws ParseException
     * @author:jeffxu
     * @email:835264047@qq.com
     */
    public static boolean compareDate(String dateStr1, String dateStr2) throws ParseException {
        Date date1 = formatDate.parse(dateStr1);
        Date date2 = formatDate.parse(dateStr2);
        return compareDate(date1, date2);
    }

    /**
     * 获取月的开始时间和结束时间
     * @param vo 查询条件vo
     * @param date 日期
     * @return 包括开始时间和结束时间的查询条件Vo
     * @author:Fisher
     * @email:zhuangcaijin@126.com
     */
    public static SearchConditionVo getMonthDuring(SearchConditionVo vo, Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        int day = cal.getActualMaximum(Calendar.DATE);
        String month = cal.get(Calendar.MONTH) > 8 ? String.valueOf(cal.get(Calendar.MONTH) + 1) : "0" + String.valueOf(cal.get(Calendar.MONTH) + 1);
        vo.setBeginTime(cal.get(Calendar.YEAR) + "-" + month + "-01 00:00:00");
        vo.setEndTime(cal.get(Calendar.YEAR) + "-" + month + "-" + day + " 23:59:59");
        return vo;
    }

    /**
     * 获取指定某一天的开始时间和结束时间
     * @param vo 查询条件vo
     * @param date 日期
     * @return 包括指定某天开始时间和结束时间的查询条件Vo
     * @author:Fisher
     * @email:zhuangcaijin@126.com
     */
    public static SearchConditionVo getDayDuring(SearchConditionVo vo, Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);

        String day = SHORT_DATE_FORMAT.format(date);
        vo.setBeginTime(day);
        vo.setEndTime(day + " 23:59:59");
        return vo;
    }

    /**
     * 获取年的开始时间和结束时间
     * @param vo 查询条件vo
     * @param date 日期
     * @return 包括指定年开始时间和结束时间的查询条件Vo
     * @author:Fisher
     * @email:zhuangcaijin@126.com
     */
    public static SearchConditionVo getYearDuring(SearchConditionVo vo, Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        vo.setBeginTime(cal.get(Calendar.YEAR) + "-01-01 00:00:00");
        vo.setEndTime(cal.get(Calendar.YEAR) + "-12-31 23:59:59");
        return vo;
    }

    /**
     * 获取本周开始时间和结束时间
     * @param vo 查询条件vo
     * @author:zhangyu
     * @email:zhangyu2222z@sina.cn
     */
    public static void getThisWeek(SearchConditionVo vo) {
        Calendar cal = Calendar.getInstance();
        Date a = DateUtils.addDays(cal.getTime(), -1);
        cal.setTime(a);
        cal.add(Calendar.WEEK_OF_YEAR, 0);// 一周
        cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
        vo.setBeginTime(SHORT_DATE_FORMAT.format(cal.getTime()));
        cal.add(Calendar.WEEK_OF_YEAR, 1);// 一周
        cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
        vo.setEndTime(SHORT_DATE_FORMAT.format(cal.getTime()) + " 23:59:59");
    }

    /**
     * 获取上周开始时间和结束时间
     * @param vo 查询条件vo
     * @author:zhangyu
     * @email:zhangyu2222z@sina.cn
     */
    public static void getLastWeek(SearchConditionVo vo) {
        Calendar cal = Calendar.getInstance();
        Date a = DateUtils.addDays(cal.getTime(), -1);
        cal.setTime(a);
        cal.add(Calendar.WEEK_OF_YEAR, -1);
        cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
        vo.setBeginTime(SHORT_DATE_FORMAT.format(cal.getTime()));
        cal.add(Calendar.WEEK_OF_YEAR, 1);
        cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
        vo.setEndTime(SHORT_DATE_FORMAT.format(cal.getTime()) + " 23:59:59");
    }

    /**
     * 获取本季度开始结束时间
     * @param vo 查询条件vo
     * @author:zhangyu
     * @email:zhangyu2222z@sina.cn
     */
    public static void getThisQuarter(SearchConditionVo vo) {
        Calendar c = Calendar.getInstance();
        int currentMonth = c.get(Calendar.MONTH) + 1;
        if (currentMonth >= 1 && currentMonth <= 3) {
            c.set(Calendar.MONTH, 0);
            c.set(Calendar.DATE, 1);
            vo.setBeginTime(SHORT_DATE_FORMAT.format(c.getTime()));
            c.set(Calendar.MONTH, 2);
            c.set(Calendar.DATE, 31);
            vo.setBeginTime(SHORT_DATE_FORMAT.format(c.getTime()) + " 23:59:59");
        } else if (currentMonth >= 4 && currentMonth <= 6) {
            c.set(Calendar.MONTH, 3);
            c.set(Calendar.DATE, 1);
            vo.setBeginTime(SHORT_DATE_FORMAT.format(c.getTime()));
            c.set(Calendar.MONTH, 5);
            c.set(Calendar.DATE, 30);
            vo.setBeginTime(SHORT_DATE_FORMAT.format(c.getTime()) + " 23:59:59");
        } else if (currentMonth >= 7 && currentMonth <= 9) {
            c.set(Calendar.MONTH, 6);
            c.set(Calendar.DATE, 1);
            vo.setBeginTime(SHORT_DATE_FORMAT.format(c.getTime()));
            c.set(Calendar.MONTH, 8);
            c.set(Calendar.DATE, 30);
            vo.setBeginTime(SHORT_DATE_FORMAT.format(c.getTime()) + " 23:59:59");
        } else if (currentMonth >= 10 && currentMonth <= 12) {
            c.set(Calendar.MONTH, 9);
            c.set(Calendar.DATE, 1);
            vo.setBeginTime(SHORT_DATE_FORMAT.format(c.getTime()));
            c.set(Calendar.MONTH, 11);
            c.set(Calendar.DATE, 31);
            vo.setBeginTime(SHORT_DATE_FORMAT.format(c.getTime()) + " 23:59:59");
        }
    }

    /**
     * 获取上季度开始结束时间
     * @param vo 查询条件vo
     * @author:zhangyu
     * @email:zhangyu2222z@sina.cn
     */
    public static void getLastQuarter(SearchConditionVo vo) {
        Calendar c = Calendar.getInstance();
        int currentMonth = c.get(Calendar.MONTH) + 1;
        if (currentMonth >= 1 && currentMonth <= 3) {
            c.add(Calendar.YEAR, -1);
            c.set(Calendar.MONTH, 9);
            c.set(Calendar.DATE, 1);
            vo.setBeginTime(SHORT_DATE_FORMAT.format(c.getTime()));
            c.set(Calendar.MONTH, 11);
            c.set(Calendar.DATE, 31);
            vo.setBeginTime(SHORT_DATE_FORMAT.format(c.getTime()) + " 23:59:59");
        } else if (currentMonth >= 4 && currentMonth <= 6) {
            c.set(Calendar.MONTH, 0);
            c.set(Calendar.DATE, 1);
            vo.setBeginTime(SHORT_DATE_FORMAT.format(c.getTime()));
            c.set(Calendar.MONTH, 2);
            c.set(Calendar.DATE, 31);
            vo.setBeginTime(SHORT_DATE_FORMAT.format(c.getTime()) + " 23:59:59");
        } else if (currentMonth >= 7 && currentMonth <= 9) {
            c.set(Calendar.MONTH, 3);
            c.set(Calendar.DATE, 1);
            vo.setBeginTime(SHORT_DATE_FORMAT.format(c.getTime()));
            c.set(Calendar.MONTH, 5);
            c.set(Calendar.DATE, 30);
            vo.setBeginTime(SHORT_DATE_FORMAT.format(c.getTime()) + " 23:59:59");
        } else if (currentMonth >= 10 && currentMonth <= 12) {
            c.set(Calendar.MONTH, 6);
            c.set(Calendar.DATE, 1);
            vo.setBeginTime(SHORT_DATE_FORMAT.format(c.getTime()));
            c.set(Calendar.MONTH, 8);
            c.set(Calendar.DATE, 30);
            vo.setBeginTime(SHORT_DATE_FORMAT.format(c.getTime()) + " 23:59:59");
        }
    }

    /**
     * 获取近七天起始时间和结束时间
     * @param vo
     * @author:zhangyu
     * @email:zhangyu2222z@sina.cn
     */
    public static SearchConditionVo getSevenDays(SearchConditionVo vo) {
        Calendar now = Calendar.getInstance();
        Date begin = DateUtils.addDays(now.getTime(), -7);
        Calendar cal = Calendar.getInstance();
        cal.setTime(begin);
        vo.setBeginTime(SHORT_DATE_FORMAT.format(cal.getTime()));
        Date end = DateUtils.addDays(now.getTime(), -1);
        cal.setTime(end);
        vo.setEndTime(SHORT_DATE_FORMAT.format(cal.getTime()) + " 23:59:59");
        return vo;
    }

    /**
     * 获取当前时间
     * @return
     * @author:Fisher
     * @email:zhuangcaijin@126.com
     */
    public static String getCurrentSysDate() {
        return DateTool.formatDate.format(new Date());
    }
    
    /**
     * 获取当前时间(不含时分秒)
     * @return
     * @author:Fisher
     * @email:zhuangcaijin@126.com
     */
    public static String getCurrentSysStandDate() {
        return DateTool.SHORT_DATE_FORMAT.format(new Date());
    }
    /**
     * 获取当前时间
     * @param formatStr
     * @return
     * @author:Fisher
     * @email:zhuangcaijin@126.com
     */
    public static String getCurrentSysDate(String formatStr) {
        SimpleDateFormat formatDate = new SimpleDateFormat(formatStr);
        return formatDate.format(new Date());
    }

    /**
     * @Title: getFirstDayOfMonth
     * @Description: 获取月份第一天
     * @author zhangl
     * @param date
     * @return String
     */
    public static String getFirstDayOfMonth(String date) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Calendar calendar = Calendar.getInstance();
        try {
            calendar.setTime(sdf.parse(date));
        } catch (ParseException e) {
            e.printStackTrace();
        }
        calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMinimum(Calendar.DAY_OF_MONTH));
        return sdf.format(calendar.getTime());
    }

    /**
     * @Title: getLastDayOfMonth
     * @Description: 获取月份最后一天
     * @author zhangl
     * @param date
     * @return String
     */
    public static String getLastDayOfMonth(String date) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Calendar calendar = Calendar.getInstance();
        try {
            calendar.setTime(sdf.parse(date));
        } catch (ParseException e) {
            e.printStackTrace();
        }
        calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
        return sdf.format(calendar.getTime());
    }

    /**
     * @Title: getDaysOfMonth
     * @Description: 根据月份，获取天数
     * @author zhangl
     * @param date
     * @return int
     */
    public static int getDaysOfMonth(String date) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
        Calendar calendar = Calendar.getInstance();
        try {
            calendar.setTime(sdf.parse(date));
        } catch (ParseException e) {
            e.printStackTrace();
        }
        int day = calendar.getActualMaximum(Calendar.DATE);
        return day;
    }

    /**
     * @Title: getDaysOfMonth
     * @Description: 根据月份，获取天数集合字符串
     * @author zhangl
     * @param monthly
     * @return List<String>
     */
    public List<String> getDayListOfMonth(String monthly) {
        List<String> dayList = new ArrayList<String>();
        int day = DateTool.getDaysOfMonth(monthly);
        for (int i = 1; i <= day; i++) {
            if ((i + "").length() < 2) {
                dayList.add("0" + i);
            } else {
                dayList.add("" + i);
            }
        }
        return dayList;
    }

    public static void main(String[] args) {
        // Calendar c = new GregorianCalendar();
        // c.setFirstDayOfWeek(Calendar.MONDAY);
        // c.setMinimalDaysInFirstWeek(7);
        //
        // SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
        // // ParsePosition pos = new ParsePosition(0);
        // Date strtodate = formatter.parse("2015-01-08", pos);
        //
        // c.setTime (strtodate);
        // System.out.println(c.get(Calendar.WEEK_OF_YEAR));

    }

}
